package primary;

/**
 * 1. String 是不可变的
 * 2. 比较字符串的时候使用equals方法
 * <p>
 * 3. StringBuilder 是可变的 线程不安全， 效率高
 * 4. StringBuffer 是可变的，线程安全，但是效率低下
 */
public class L_String_StringBuilder {

    public static void main(String[] args) {
        String str1 = "hello" + "java";
        String str2 = "hello";
        String str3 = "java";
        String str5 = str2 + str3;
        System.out.println(str1 == str5);
        System.out.println(str1.equals(str5));
        System.out.println("-------------------------");
        //StringBuilder 线程不安全， 效率高（尝使用）， StringBuffer线程安全，效率低
        StringBuilder sb = new StringBuilder("abcdefg");
        System.out.println(Integer.toHexString(sb.hashCode()));
        System.out.println(sb);

        sb.setCharAt(2, 'M');
        System.out.println(Integer.toHexString(sb.hashCode()));
        System.out.println(sb);

        System.out.println("----------------StringBuilder 常用方法----------");
        for (int i = 0; i < 26; i++) {
            sb.append((char) ('a' + i));
        }
        System.out.println(sb);
        sb.reverse();//因为StringBuilder 是可变的所以不用返回值
        System.out.println(sb);
        sb.setCharAt(3, '我');
        System.out.println(sb);
        System.out.println(sb.insert(10, '爱'));
        System.out.println(sb.delete(20, 23));
    }
}
